//
// Created by postgres on 4/20/17.
//
#include "../include/03StackQueue/queue.h"
typedef int ElemType;/* ElemType类型根据实际情况而定，这里假设为int */
Status InitLinkQueue(LinkQueue *lq){
    QueuePtr p;
    p=(QueuePtr)palloc(sizeof(QNode));
    (*lq).front=(*lq).rear=p;
    return OK;
}
Status EnLinkQueue(LinkQueue *lq_rear,ElemType e){
    QueuePtr p;
    p=(QueuePtr)palloc(sizeof(QNode));
    p->data=e;
    p->next=NULL;
    (*lq_rear).rear->next=p;
    (*lq_rear).rear=p;
    return OK;
}
/*keep head node*/
Status DeLinkQueue(LinkQueue *lq_front,ElemType *e){
    if(lq_front->front==lq_front->rear){
        printf("queue empty!");
    }
    QueuePtr p;
    p=(*lq_front).front->next;
    *e=p->data;
    (*lq_front).front->next=p->next;
    if((*lq_front).rear==p){
        (*lq_front).rear=(*lq_front).front;
    }
    pfree(p);
    return OK;
}
Status LinkQueueEmpty(LinkQueue *lq_front) {
    if (lq_front->front == NULL)return TRUE;
    else return FALSE;
}
void LinkQueue_test(){
    LinkQueue lq;
    int e;
    InitLinkQueue(&lq);
    EnLinkQueue(&lq,8191);
    EnLinkQueue(&lq,8192);
    EnLinkQueue(&lq,8193);
    EnLinkQueue(&lq,8194);
    DeLinkQueue(&lq,&e);
    DeLinkQueue(&lq,&e);
    DeLinkQueue(&lq,&e);
    DeLinkQueue(&lq,&e);
}